<?php
session_start();
include_once 'connect.php';
include_once 'Function.php';

// 添加调试输出
error_log("开始处理文章更新");

// 获取表单数据
$id = $_POST['id'];
$articletitle = $_POST['articletitle'];
$articletext = $_POST['articletext'];

// 备份原始内容，以防处理失败
$original_text = $articletext;

// 检查是否有Base64图片需要处理
if(strpos($articletext, 'data:image/') !== false) {
    try {
        // 创建上传目录 - 使用与upload.php相同的路径结构
        $upload_dir = '../uploads/images/' . date('Y/m/');
        if(!is_dir($upload_dir)) {
            mkdir($upload_dir, 0777, true);
            error_log("创建上传目录: " . $upload_dir);
        }
        
        // 检查目录权限
        if(!is_writable($upload_dir)) {
            error_log("警告: 上传目录不可写: " . $upload_dir);
            chmod($upload_dir, 0777);
            error_log("尝试修改目录权限为777");
        }
        
        // 使用简单的正则表达式替换方法处理Base64图片
        $pattern = '/<img[^>]*src=(["\'])(data:image\/(jpeg|png|gif|jpg);base64,[^"\']+)\1[^>]*>/i';
        
        $articletext = preg_replace_callback($pattern, function($matches) use ($upload_dir) {
            $full_img_tag = $matches[0]; // 完整的img标签
            $quote = $matches[1]; // 引号类型 (' 或 ")
            $base64_data = $matches[2]; // 完整的base64数据URL
            $img_type = $matches[3]; // 图片类型 (jpeg, png, gif, jpg)
            
            // 检查是否是有效的Base64图片
            if(strpos($base64_data, 'data:image/') === 0) {
                error_log("处理Base64图片: " . substr($base64_data, 0, 50) . "...");
                
                // 提取图片数据
                list($header, $data) = explode(',', $base64_data, 2);
                
                // 生成唯一文件名 - 使用与upload.php相同的命名方式
                $new_filename = uniqid() . '.' . $img_type;
                $destination = $upload_dir . $new_filename;
                
                // 解码Base64数据并保存为文件
                $decoded_data = base64_decode($data);
                if($decoded_data && file_put_contents($destination, $decoded_data)) {
                    error_log("图片保存成功: " . $destination);
                    
                    // 创建新的图片URL - 使用绝对路径
                    $img_url = '/uploads/images/' . date('Y/m/') . $new_filename;
                    
                    // 记录图片URL
                    error_log("图片URL: " . $img_url);
                    
                    // 替换src属性，同时保留其他属性
                    $new_img_tag = str_replace($base64_data, $img_url, $full_img_tag);
                    error_log("图片标签已更新");
                    
                    return $new_img_tag;
                } else {
                    error_log("图片保存失败，保留原始Base64数据: " . (empty($decoded_data) ? "解码失败" : "写入失败: " . error_get_last()['message']));
                    return $full_img_tag; // 保留原始标签
                }
            } else {
                error_log("跳过非Base64图片");
                return $full_img_tag; // 保留原始标签
            }
        }, $articletext);
        
        error_log("图片处理完成，内容长度: " . strlen($articletext));
    } catch (Exception $e) {
        error_log("图片处理失败: " . $e->getMessage());
        // 如果处理失败，使用原始内容
        $articletext = $original_text;
    }
}

// 使用事务确保数据完整性
$connect->begin_transaction();

try {
    // 更新文章
    $sql = "UPDATE article SET articletitle=?, articletext=? WHERE id=?";
    $stmt = $connect->prepare($sql);
    
    if(!$stmt) {
        throw new Exception("准备SQL语句失败: " . $connect->error);
    }
    
    $stmt->bind_param("ssi", $articletitle, $articletext, $id);
    $result = $stmt->execute();
    
    if(!$result) {
        throw new Exception("执行SQL失败: " . $stmt->error);
    }
    
    $stmt->close();
    
    // 提交事务
    $connect->commit();
    
    error_log("文章更新成功，ID: " . $id);
    // 确保只输出一个"1"，没有其他字符或空格
    echo "1";
    exit;
} catch (Exception $e) {
    // 回滚事务
    $connect->rollback();
    
    error_log("文章更新失败: " . $e->getMessage());
    echo "0";
    exit;
}

$connect->close();
?>

